"""
__author__ = '霍格沃兹测试开发学社'
__desc__ = '更多测试开发技术探讨，请访问：https://ceshiren.com/t/topic/15860'
"""
from typing import List

from sqlalchemy import *
from sqlalchemy.orm import relationship

from do.testcase_plan_rel import testcase_plan_rel
from server import db
from do.testcase_do import TestcaseDo


# 创建测试计划表
class PlanDo(db.Model):
    # 表名
    __tablename__ = "plan"
    # 用例ID 用例的唯 一标识
    id = db.Column(Integer, primary_key=True)
    # 计划名称,限定 80个字符 ，不为空，并且唯一
    name = db.Column(String(80), nullable=False, unique=True)
    # 绑定的测试用例
    # 参数1： 关联的另外一个业务表类名， 参数2： 中间表 ， 参数3： 反射别名
    testcases: List[TestcaseDo] = relationship("TestcaseDo", secondary=testcase_plan_rel, backref="plans")

    def as_dict(self):
        return {
            "id": self.id,
            "name": self.name,
            "testcases": [testcase.as_dict() for testcase in self.testcases],
        }
